import React, { Component } from 'react'
import Header from './components/Header/Header'
import List from './components/List/List'
import Footer from './components/Footer/Footer'
import './App.css'
export default class App extends Component {
  state = {
    // 状态提升: 多个组件要用到的同一份状态数据,定义到他们的公共父组件中
    todos: [
      {
        id: 1,
        todoName: '吃饭',
        isDone: false,
      },
      {
        id: 2,
        todoName: '睡觉',
        isDone: true,
      },
    ],
  }

  // 添加任务
  addTodo = (todoName) => {
    // console.log(todoName)
    // 根据任务名创建任务对象
    const todo = {
      id: Date.now(),
      todoName,
      isDone: false,
    }

    // 要将这个任务对象,添加到todos状态里面
    // this.state.todos.push(todo) 按照规范不建议这样直接修改数据
    // 根据旧数据创建新数据
    const newTodos = [...this.state.todos]
    // 修改新数据
    newTodos.push(todo)
    this.setState({
      todos: newTodos,
    })
  }

  // 修改任务状态
  updateTodo = (id) => {
    // console.log(id)
    const newTodos = this.state.todos.map((item) => {
      if (item.id === id) {
        item.isDone = !item.isDone
      }
      return item
    })

    this.setState({
      todos: newTodos,
    })
  }

  // 删除一条任务数据
  delTodo = (id) => {
    const newTodos = this.state.todos.filter((item) => {
      // 遍历过程中,如果返回值是true,则当前一条数据会添加到新数组中,如果返回false,则当前一条数据不会添加到新数组中(被过滤了)
      // if (item.id === id) {
      //   return false
      // } else {
      //   return true
      // }
      return item.id !== id
    })
    this.setState({
      todos: newTodos,
    })
  }

  // 批量修改任务状态
  updateTodos = (target) => {
    const newTodos = this.state.todos.map((item) => {
      item.isDone = target
      return item
    })
    this.setState({
      todos: newTodos,
    })
  }

  // 清除所有已完成任务
  clearAllDoneTodos = () => {
    // 将数据中,已经完成的任务过滤掉
    const newTodos = this.state.todos.filter((item) => !item.isDone)
    this.setState({
      todos: newTodos,
    })
  }
  render() {
    const { todos } = this.state
    return (
      <div className="todo-container">
        <div className="todo-wrap">
          <Header addTodo={this.addTodo}></Header>
          {todos.length ? (
            <div>
              {/* 利用props,将List需要的数据,传递下去 */}
              <List
                list={todos}
                updateTodo={this.updateTodo}
                delTodo={this.delTodo}
              ></List>
              <Footer
                todos={todos}
                updateTodos={this.updateTodos}
                clearAllDoneTodos={this.clearAllDoneTodos}
              ></Footer>
            </div>
          ) : (
            <h1>暂无任务!</h1>
          )}
        </div>
      </div>
    )
  }
}
